 program ErSito;
 const
   MaxN = 100;
 var
   Pole: array [2 .. MaxN] of boolean;
   i, j: integer;
 begin
   {inicializace: nejprve předpokládáme, že vše jsou prvočísla}
   for i := 2 to MaxN do 
     Pole[i] := true;
   i := 1;
   repeat
     i := i + 1;
     {najdeme prvni cislo, u kterého je true}
     while (i<MaxN) and (not Pole[i]) do i := i + 1;
     {optimalizace: nemá smysl hledat násobky nižších čísel označené dříve}
     j := i;
     {najdeme všechny násobky daného prvočísla, které tudíž nejsou prvočísla}
     while j*i<=MaxN do
        begin
          Pole[j*i] := false;
          j := j + 1;
        end;
   until i>=sqrt(MaxN); {optimalizace: stačí hledat pouze po odmocninu z MaxN}
   {výpis prvočísel}
   for i := 2 to MaxN do
     if Pole[i] then
       Writeln(i);
 end.